import fs from 'fs';
import path from 'path';
import configTemplate from '../config/configTemplate.json';
import { log } from './log';

export interface Options {
    isActive: boolean;
    port: number;
    groupList: string[];
    timeOut: number;
}

/**
 * 插件配置文件夹路径
 */
// @ts-expect-error: 该第三方库类型定义不完整，需要强制调用
export const plugin_data = path.join(LiteLoader.plugins.LiteLoaderQQNT_SDWebUI_ImageQuickSend.path.data);

/**
 * 插件本体文件夹路径
 */
// @ts-expect-error: 该第三方库类型定义不完整，需要强制调用
export const plugin_path = path.join(LiteLoader.plugins.LiteLoaderQQNT_SDWebUI_ImageQuickSend.path.plugin);

class Config {
    private config: Options = {
        isActive: false, // 服务开关
        port: 6020, // 服务端口
        groupList: [], // 发送群组列表
        timeOut: 5  // 定时撤回时间
    };
    private userConfigPath: any

    /**
     * 加载用户配置
     * @param {String} userId 根据 userId 来判断读取哪个配置文件
     */
    async loadUserConfig(userId: string): Promise<any> {
        this.userConfigPath = this.getUserConfigPath(userId);
        log('用户配置文件：', userId);

        // 检查用户配置文件是否存在
        if (!fs.existsSync(this.userConfigPath)) {
            fs.mkdirSync(path.dirname(this.userConfigPath), { recursive: true });
            // 如果不存在，复制默认配置文件并重命名为当前用户的配置文件
            fs.writeFileSync(this.userConfigPath, JSON.stringify(configTemplate, null, 2), 'utf-8');
        }

        // 读取并返回用户配置文件
        Object.assign(this.config, JSON.parse(fs.readFileSync(this.userConfigPath, 'utf-8')));
        log('用户配置文件读取成功');
    }

    private getUserConfigPath(userId: number | string): string {
        return path.join(plugin_data, `${userId}.json`);
    }

    getConfig() {
        return this.config;
    }

    setConfig(newConfig: any) {
        try {
            // 使用 Object.assign() 更新 config 对象的属性
            log('变化的属性为: ' + JSON.stringify(newConfig));
            Object.assign(this.config, newConfig);
            // 写入配置文件
            fs.writeFile(this.userConfigPath, JSON.stringify(this.config, null, 4), 'utf-8', (err) => {
                if (err) {
                    log('修改配置文件失败');
                }
            });
            log('修改配置文件成功,当前配置如下');
            log(JSON.stringify(this.config, null, 4));
        } catch (e) {
            console.log(e);
        }
    }
}

export default Config;